package com.sojson.util.file.enums;

import static com.sojson.util.file.interfaces.FileTableInterface.field;
import static com.sojson.util.file.interfaces.FileTableInterface.fields;
import static com.sojson.util.file.interfaces.FileTableInterface.table;

import java.util.Arrays;
import java.util.List;

import com.sojson.entity.bo.FileField;
import com.sojson.entity.bo.FileTable;
import com.sojson.util.file.constant.ConstantFileFieldName;
import com.sojson.util.file.interfaces.FileTableInterface;

/**
 * 有文件的表枚举类
 * 
 * @author liu
 * @date 2020-10-01
 */
public enum EFileTable implements FileTableInterface {

    /** 活动表 */
    ACTIVITY(1, "rent_activity", fields(field(ConstantFileFieldName.THUMB, 1))),
    /** 广告表 */
    AD(2, "rent_ad", fields(field(ConstantFileFieldName.CONTENT, 1))),
    /** 文章分类表 */
    ARTICLE_CATE(3, "rent_article_cate", fields(field(ConstantFileFieldName.THUMB, 1))),
    /** 商品评论表 */
    COMMENT(4, "rent_comment", fields(field(ConstantFileFieldName.IMAGES, 2))),
    /** 商品分类表 */
    GOOD_CATE(6, "rent_good_cate", fields(field(ConstantFileFieldName.THUMB, 1))),
    /** 商品规格组合表 */
    GOOD_SPECS(7, "rent_good_specs", fields(field(ConstantFileFieldName.THUMB, 1))),
    /** 商品表 */
    GOODS(8, "rent_goods", fields(field(ConstantFileFieldName.THUMB, 1, true), field(ConstantFileFieldName.IMAGES, 2)),
        table("rent_order_goods", fields(field(ConstantFileFieldName.THUMB, ConstantFileFieldName.THUMB, 1)))),
    /** 用户表 */
    MEMBER(9, "rent_member",
        fields(field(ConstantFileFieldName.HEAD_IMG, 1, true), field(ConstantFileFieldName.ID_CARD_FRONT, 1),
            field(ConstantFileFieldName.ID_CARD_VERSO, 1), field(ConstantFileFieldName.LABOR_CARD, 1),
            field(ConstantFileFieldName.FOOD_CARD, 1), field(ConstantFileFieldName.TELECOM_CARD, 1)),
        table("rent_comment", fields(field(ConstantFileFieldName.HEAD_IMG, ConstantFileFieldName.HEAD_IMG, 1)))),
    /** 企业资料认证表 */
    MEMBER_INFO(10, "rent_member_info",
        fields(field(ConstantFileFieldName.BANK_CARD_IMG, 1), field(ConstantFileFieldName.BUSINESS_CERT_IMG, 1))),
    /** 菜单表 */
    MENU(11, "rent_menu", fields(field(ConstantFileFieldName.ICON, 1))),
    /** 订单商品表 */
    ORDER_GOODS(12, "rent_order_goods", fields()),
    /** 职位表 */
    POST(13, "rent_post", fields(field(ConstantFileFieldName.IMG, 1), field(ConstantFileFieldName.IMGS, 2))),
    /** 规格明细表 */
    SPECS_ATTR(14, "rent_specs_attr", fields(field(ConstantFileFieldName.THUMB, 1))),
    /** 酒店信息表 */
    HOTEL(15, "rent_hotel", fields(field(ConstantFileFieldName.IMG, 1, true), field(ConstantFileFieldName.IMGS, 2)),
        table("rent_hotel_order_room", fields(field(ConstantFileFieldName.IMG, ConstantFileFieldName.IMG, 1)))),
    /** 房间信息表 */
    HOTEL_ROOM(16, "rent_hotel_room",
        fields(field(ConstantFileFieldName.IMG, 1), field(ConstantFileFieldName.IMGS, 2))),
    /** 入驻记录房间信息表 */
    HOTEL_ORDER_ROOM(17, "rent_hotel_order_room", fields())
    /***/
    ;

    /** 类型代码 */
    private int code;
    /** 表名 */
    private String tableName;
    /** 订单关联关系表名集合 */
    private List<FileTable> tableNameOrders;
    /** 字段列表 */
    private List<FileField> fields;

    private EFileTable(int code, String name, List<FileField> fields) {
        this.code = code;
        this.tableName = name;
        this.fields = fields;
    }

    private EFileTable(int code, String name, List<FileField> fields, FileTable... tableNameOrders) {
        this.code = code;
        this.tableName = name;
        this.fields = fields;
        this.tableNameOrders = Arrays.asList(tableNameOrders);
    }

    /**
     * 获取类型代码
     * 
     * @return
     */
    @Override
    public int getCode() {
        return code;
    }

    /**
     * 设置类型代码
     * 
     * @param code
     */
    @Override
    public void setCode(int code) {
        this.code = code;
    }

    /**
     * 获取表名
     * 
     * @return
     */
    @Override
    public String getTableName() {
        return tableName;
    }

    /**
     * 设置表名
     * 
     * @param tableName
     */
    @Override
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    /**
     * 获取订单关联关系表名集合
     * 
     * @return
     */
    @Override
    public List<FileTable> getTableNameOrders() {
        return tableNameOrders;
    }

    /**
     * 设置订单关联关系表名集合
     * 
     * @param tableNameOrders
     */
    @Override
    public void setTableNameOrders(List<FileTable> tableNameOrders) {
        this.tableNameOrders = tableNameOrders;
    }

    /**
     * 获取字段列表
     * 
     * @return
     */
    @Override
    public List<FileField> getFields() {
        return fields;
    }

    /**
     * 设置字段列表
     * 
     * @param fileds
     */
    @Override
    public void setFields(List<FileField> fields) {
        this.fields = fields;
    }

}